7-14 十六进制转十进制

7-14 十六进制转十进制 分数 5 作者 李祥 单位 湖北经济学院

请编写程序,输入十六进制数,输出对应的十进制数。

输入格式

十六进制非负整数

输出格式

对应的十进制非负整数

输入样例

13Ba

输出样例

5050

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

# 代码:

# 方法1:

#include <stdio.h>
int main(){
    unsigned int hex_str; //因为%x,这里必须使用 unsigned 
    scanf("%x",&hex_str); //%x 相当与将输入的内容,以16进制的形式接收

    printf("%d",hex_str);
    //为何可以使用这种方法,具体请看下方 解题思路
}
1
2
3
4
5
6
7
8

# 方法2:

#include·<stdio.h>

int·main()
{
····char·s[50];
····//定义字符变量char
····scanf("%s",&s);
····int·t;
····long·sum·=·0;
//定义long int型变量
····for(int·i·=·0;·s[i];·i++)
····{
········if(s[i]·<=·'z'·&&·s[i]·>=·'a'){
············t·=·s[i]·-·'a'·+·10;
············//'a'的ascill码是97,加上10是10以上的数的真正数字
········}else·if(s[i]·<=·'Z'·&&·s[i]·>=·'A'){
············t·=·s[i]·-·'A'·+·10;
············//'A'的ascill码是65,加上10是10以上的数的真正数字
········}else{
············t·=·s[i]·-·'0';
············//'0'的ascill码是48,加上10是10以下的数的真正数字
········}
········sum·=·sum·*·16·+·t;
········//十六进制转换和真正的数字
····}
····printf("%ld",sum);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 解题思路:

方法1:

  1. 首先要明白什么是16进制, 16进制:0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)
  2. 使用格式化输出符号%x进行接收,%x就是接收16进制的内容
  3. 然后最后使用%u进行输出,即转换为10进制

方法2:

  • step 1:输入十六进制数;
  • step 2:通过ascill码将'a'转换97再加上10以上的数的真正数字;
  • step 3:通过ascill码将'A'转换65再加上10以上的数的真正数字;
  • step 4:通过ascill码将'A'转换65再加上10以上的数的真正数字;
  • step 5:通过ascill码将'0'转换48再加上10以下的数的真正数字;
  • step 6:将十六进制转换和真正的数字相加就是最后的十进制数。

归属知识点:

  • 方法1: 格式化输出符号

  • 方法2: 选择和循环结构,进制转换

最后编辑于: 4/1/2024, 1:51:46 PM